import axios, {
  AxiosError,
  type AxiosInstance,
  type AxiosResponse,
  type InternalAxiosRequestConfig,
} from "axios";

// 引入 Element Plus 的通知组件（用于错误提示）
import { ElNotification } from "element-plus";

// 创建 Axios 实例
const service: AxiosInstance = axios.create({
  // baseURL: "https://www.demo.com", // 后面会替换成环境变量
  // baseURL: "http://localhost:3000", // 后面会替换成环境变量
  baseURL: import.meta.env.VITE_API_URL, // 使用环境变量作为基础URL
  timeout: 5000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在请求发送之前做一些处理
    // 例如添加请求头、修改请求参数等
    return config;
  },
  (error: AxiosError) => {
    // 请求错误处理
    ElNotification.error({
      title: "请求错误",
      message: error.message,
      duration: 3000, // 显示时间
      type: "error",
    });
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 在响应返回之前做一些处理

    // 错误处理
    if (response.data.code !== 200) {
      ElNotification.error({
        title: "响应错误",
        message: response.data.message,
        duration: 1000,
        type: "error",
      });
      return Promise.reject(new Error(response.statusText));
    } else {
      return response.data;
    }
  },
  (error: AxiosError) => {
    // 响应错误处理
    console.error("Response error:", error);
    return Promise.reject(error);
  }
);

export default service;
